package services.common;

import java.util.Date;
import java.util.List;
import java.util.Map;

import models.common.bean.RechargeRecord;
import models.common.bean.WithdrawalRecord;
import models.common.entity.t_deal_user;
import models.common.entity.t_deal_user.OperationType;
import net.sf.json.JSONObject;
import services.base.BaseService;
import common.enums.ServiceType;
import common.utils.Factory;
import common.utils.OrderNoUtil;
import common.utils.PageBean;
import daos.common.DealUserDao;

/**
 * 用户交易记录service接口实现
 * 
 * @description 
 *
 * @author ChenZhipeng
 * @createDate 2015年12月21日
 */
public class DealUserService extends BaseService<t_deal_user> {

	protected DealUserDao dealUserDao = Factory.getDao(DealUserDao.class);;
	
	protected DealUserService() {
		super.basedao = this.dealUserDao;
	}
	
	/**
	 * 添加一条用户交易信息
	 *
	 * @param serial_number 业务订单号
	 * @param userId 用户ID
	 * @param amount 交易金额
	 * @param balance 可用余额
	 * @param freeze 冻结金额
	 * @param dealType 交易类型
	 * @param operation 操作类型枚举
	 * @param summaryParam 备注参数
	 * @return
	 *
	 * @author huangyunsong
	 * @createDate 2015年12月28日
	 */
	public boolean addDealUserInfo(String serial_number, long userId, double amount,
			double balance, double freeze, t_deal_user.OperationType operationType,
			Map<String, String> summaryParam) {
		t_deal_user dealUser = new t_deal_user();
		//交易记录流水号
		String orderNo = OrderNoUtil.getNormalOrderNo(ServiceType.QUERYTXN, "");
		dealUser.order_no = orderNo;
		dealUser.time = new Date();
		dealUser.user_id = userId;
		dealUser.serial_number = serial_number;
		dealUser.amount = amount;
		dealUser.balance = balance;
		dealUser.freeze = freeze;
		dealUser.setOperation_type(operationType, summaryParam);

		return dealUserDao.save(dealUser);
	}

	/**
	 * 查询交易记录
	 *
	 * @param pageSize  页码
	 * @param currPage 当前页
	 * @return
	 *
	 * @author Chenzhipeng
	 * @createDate 2015年12月21日
	 */
	public PageBean<t_deal_user> pageOfDealUser(int currPage, int pageSize, long userId) {
		
		return dealUserDao.pageOfDealUser(currPage, pageSize, userId);
	}

	/**
	 * 充值记录（后台,交易记录表中获取）
	 *
	 * @param pageSize
	 * @param currPage
	 * @param exports 1：导出  default:不导出
	 * @param name 会员昵称
	 * @return
	 * 
	 * @author Chenzhipeng
	 * @createDate 2015年12月22日
	 */
	public PageBean<RechargeRecord> pageOfRechargeRecord(int showType,int currPage ,int pageSize, int exports, String name) {
		
		return dealUserDao.pageOfRechargeRecord(showType,currPage, pageSize,exports,name);
	}

	/**
	 * 提现记录（后台,交易记录表中获取）
	 * 
	 * @param pageSize
	 * @param currPage
	 * @param exports 1:导出  default：不导出
	 * @param name 会员
	 * 
	 * @author Chenzhipeng
	 * @createDate 2015年12月22日
	 */
	public PageBean<WithdrawalRecord> pageOfWithdrawalRecordBack(int orderValue,int showType,int currPage,int pageSize,int exports,String name) {
		
		return dealUserDao.pageOfWithdrawalRecordBack(orderValue,showType,currPage, pageSize, t_deal_user.OperationType.WITHDRAW,exports,name);
	}
	
	/**
	 * 查询提现总额
	 *
	 * @param name 会员昵称
	 * @return
	 *
	 * @author liudong
	 * @createDate 2016年1月19日
	 */
	public double findWithdrawalTotalAmt(String name) {
		
		return dealUserDao.findTransactionlTotalAmt(t_deal_user.OperationType.WITHDRAW, name);
	}

	/**
	 * 查询充值总额
	 *
	 * @param name 会员昵称
	 * @return
	 *
	 * @author liudong
	 * @createDate 2016年1月19日
	 */
	public double findRechargeTotalAmt(String name) {
		//账户直充
		double amt1 = dealUserDao.findTransactionlTotalAmt(t_deal_user.OperationType.RECHARGE,name);
		//闪电快充
		double amt2 = dealUserDao.findTransactionlTotalAmt(t_deal_user.OperationType.RECHARGE_QUICK,name);
		
		return amt1+amt2;
	}

	/**
	 * 交易记录查询，包括交易类型和时间的查询，导出
	 * @param currPage
	 * @param pageSize
	 * @param dealtype
	 * @param startDate
	 * @param endDate
	 * @param userId
	 * @return 
	 * @createDate 2017年5月11日
	 */
	public PageBean<t_deal_user> pageOfDealUserAndSerch(int currPage,int pageSize, int operationType, String startDate, String endDate,long userId) {
		
		return dealUserDao.pageOfDealUserAndSerch(currPage,pageSize,operationType,startDate,endDate,userId);
	}
	/**
	 * 后台-资金明细
	 * @param currPage
	 * @param pageSize
	 * @param dealtype
	 * @param startDate
	 * @param endDate
	 * @param userId
	 * @return 
	 * @createDate 2017年5月11日
	 */
	public PageBean<t_deal_user> pageOfDealUserAndSerch(int currPage,int pageSize, String username,int exports) {
		
		return dealUserDao.pageOfDealUserAndSerch(currPage,pageSize,username,exports);
	}
	/**
	 * 交易支出总额
	 * 
	 * @param userId
	 * @return
	 * @author zhiliang.lan
	 * @param endDate 
	 * @param startDate 
	 * @param operationType 
	 * @createDate 2017年6月8日
	 */
	public double zhichuTotalDealUser(long userId, int operationType, String startDate, String endDate) {
		
		return dealUserDao.zhichuTotalDealUser(userId,operationType, startDate, endDate);
	}

	/**
	 * 交易支出总额
	 * 
	 * @param userId
	 * @return
	 * @author zhiliang.lan
	 * @param endDate 
	 * @param startDate 
	 * @param operationType 
	 * @createDate 2017年6月8日
	 */
	public double shouruTotalDealUser(long userId, int operationType, String startDate, String endDate) {
		
		return dealUserDao.shouruTotalDealUser(userId,operationType, startDate, endDate);
	}
	/**
	 * 资金明细金额统计
	 * 
	 * @param userId
	 * @return
	 * @author zhiliang.lan
	 * @param endDate 
	 * @param startDate 
	 * @param operationType 
	 * @createDate 2017年6月8日
	 */
	public double sumDealUserAndSerch(  String username,int deal_type) {
		
		return dealUserDao.sumDealUserAndSerch( username, deal_type);
	}
	/**
	 * 根据userId查询最新的交易记录
	 * 
	 * @param id
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年6月21日
	 */
	public List<t_deal_user> findListByUserId(long userId) {
		
		return dealUserDao.findListByUserId(userId);
	}

	/**
	 * 根据userId查询最新的交易记录 -app
	 * 
	 * @param userId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年8月1日
	 */
	public List<Map<String, Object>> findListByUserIdApp(long userId) {
		
		return dealUserDao.findListByUserIdApp(userId);
	}

	/**
	 * 账单管理  -app
	 * @param userId
	 * @param type
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年8月2日
	 */
	public PageBean<Map<String, Object>> findDealRecordApp(int currPage, int pageSize,
			long userId, int dealType) {
		
		return dealUserDao.findDealRecordApp(currPage, pageSize, userId, dealType);
	}

	/**
	 * 账单详情   -app
	 * @param dealUserId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年8月2日
	 */
	public Map<String, Object> findDealUserDetailAppById(long dealUserId) {
		
		return dealUserDao.findDealUserDetailAppById(dealUserId);
	}

	/**
	 *	根据放款人id和交易记录类型查询放款人收取的所有额度管理费
	 * @param userId 放款人id
	 * @param custodianFetchPayCredit 交易记录类型（放款人审核通过收取票信额度管理费）
	 * @param custodianFeeIncome 交易记录类型（收取额度管理费）
	 * @return
	 * @author LiangQiongfeng 
	 *@version 2018-3-8 
	 * @param custodianFeeIncome 
	 */
	public double findCustodianFee(long userId,
			OperationType custodianFetchPayCredit, OperationType custodianFeeIncome) {
		
		return dealUserDao.findCustodianFee(userId,custodianFetchPayCredit,custodianFeeIncome);
	}
}
